// @ts-ignore
import { app, BrowserWindow, shell, ipcMain,Tray,Menu,nativeImage } from 'electron'
import { release } from 'node:os'
import { join } from 'node:path'
import { nodeRequest } from './nodeReq'
import { httpReq } from './netReq'







// The built directory structure
//
// ├─┬ dist-electron
// │ ├─┬ main
// │ │ └── index.js    > Electron-Main
// │ └─┬ preload
// │   └── index.js    > Preload-Scripts
// ├─┬ dist
// │ └── index.html    > Electron-Renderer
//
process.env.DIST_ELECTRON = join(__dirname, '..')
process.env.DIST = join(process.env.DIST_ELECTRON, '../dist')
process.env.PUBLIC = process.env.VITE_DEV_SERVER_URL
  ? join(process.env.DIST_ELECTRON, '../public')
  : process.env.DIST

// Disable GPU Acceleration for Windows 7
if (release().startsWith('6.1')) app.disableHardwareAcceleration()

// Set application name for Windows 10+ notifications
if (process.platform === 'win32') app.setAppUserModelId(app.getName())

if (!app.requestSingleInstanceLock()) {
  app.quit()
  process.exit(0)
}

// Remove electron security warnings
// This warning only shows in development mode
// Read more on https://www.electronjs.org/docs/latest/tutorial/security
// process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true'

let win: BrowserWindow | null = null
// Here, you can also use other preload
const preload = join(__dirname, '../preload/index.js')
const url = process.env.VITE_DEV_SERVER_URL
const indexHtml = join(process.env.DIST, 'index.html')

let tray:any = null
let isDev = !app.isPackaged
let iconPath = isDev ? join(__dirname,'..','..','public','icon.png') : join(__dirname,'..','icon.png')

async function createWindow() {
  win = new BrowserWindow({
    title: '居住地址模拟器',
    icon: iconPath,
    resizable: true,   //不允许用户改变窗口大小
    width: 1280,         //设置窗口宽高
    height: 800,
    webPreferences: {
      preload,
      // Warning: Enable nodeIntegration and disable contextIsolation is not secure in production
      // Consider using contextBridge.exposeInMainWorld
      // Read more on https://www.electronjs.org/docs/latest/tutorial/context-isolation
      nodeIntegration: true,
      contextIsolation: false,
    },
  })

  tray = new Tray(nativeImage.createFromPath(iconPath));
  // 菜单模板
  let menu:any = [
    {
      label: '显示主窗口',
      id: 'show-window',
      enabled: !win.show,
      click() {
        win!.show();
      }
    },
    {
      label: '退出',
      role: 'quit'
    }
  ];
  menu = Menu.buildFromTemplate(menu);
  // 给系统托盘设置菜单
  tray.setContextMenu(menu);
  // 给托盘图标设置气球提示
  // tray.setToolTip('Electron测试');
  // 窗口最小化
  win.on('minimize', (ev:Event) => {
    // 阻止最小化
    ev.preventDefault();
    // 隐藏窗口
    win!.hide();
  });

  // 托盘图标被双击
  tray.on('double-click', () => {
    // 显示窗口
    win!.show();
  });

  // 窗口隐藏
  win.on('hide', () => {
    // 启用菜单的显示主窗口项
    menu.getMenuItemById('show-window').enabled = true;
    // 重新设置系统托盘菜单
    tray.setContextMenu(menu);
  });

  // 窗口显示
  win.on('show', () => {
    // 禁用显示主窗口项
    menu.getMenuItemById('show-window').enabled = false;
    // 重新设置系统托盘菜单
    tray.setContextMenu(menu);
  });


  if (process.env.VITE_DEV_SERVER_URL) { // electron-vite-vue#298
    win.loadURL(url)
    // Open devTool if the app is not packaged
    win.webContents.openDevTools()
  } else {
    win.loadFile(indexHtml)
  }

  

  // Test actively push message to the Electron-Renderer
  win.webContents.on('did-finish-load', () => {
    win?.webContents.send('main-process-message', new Date().toLocaleString())
  })

  // Make all links open with the browser, not with the application
  win.webContents.setWindowOpenHandler(({ url }: { url: string }) => {
    if (url.startsWith('https:')) shell.openExternal(url)
    return { action: 'deny' }
  })
  // win.webContents.on('will-navigate', (event, url) => { }) #344
}

app.whenReady().then(createWindow)

app.on('window-all-closed', () => {
  win = null
  if (process.platform !== 'darwin') app.quit()
})

app.on('second-instance', () => {
  if (win) {
    // Focus on the main window if the user tried to open another
    if (win.isMinimized()) win.restore()
    win.focus()
  }
})

app.on('activate', () => {
  const allWindows = BrowserWindow.getAllWindows()
  if (allWindows.length) {
    allWindows[0].focus()
  } else {
    createWindow()
  }
  // 获取数据库数据，传给主窗口

})




// New window example arg: new windows url
ipcMain.handle('open-win', (_: any, arg: any) => {
  const childWindow = new BrowserWindow({
    webPreferences: {
      preload,
      nodeIntegration: true,
      contextIsolation: false,
    },
  })

  if (process.env.VITE_DEV_SERVER_URL) {
    childWindow.loadURL(`${url}#${arg}`)
  } else {
    childWindow.loadFile(indexHtml, { hash: arg })
  }
})

ipcMain.on("community-detail", async (event, arg) => {
  
  //异步消息回复
  let tempArg = JSON.parse(arg)
  let url = tempArg[0]
  let data = tempArg[1]
  let netRes = await httpReq(url,'POST',data)
  
  // let resData = nodeRequest('POST','/getCommunityDetail',data)
  // console.log('resData:',resData)
  event.reply("community-detail", JSON.stringify(netRes));
});

// ipcMain通信 测试
ipcMain.on("async-message", (event, arg) => {
  //异步消息回复
  console.log(`async-message:我接收到了异步消息`, arg);
  event.reply("async-reply", "哥们我收到消息了-来自异步");
});

ipcMain.on("sync-message", (event, arg) => {
  //同步消息回复
  console.log(`async-message:我接收到了同步消息`, arg);
  event.returnValue = "哥们我收到消息了-来自同步";
});













